import request from '@/utils/request'

const BASE_URL = '/dk/datasets'

/**
 * 获取数据集列表
 * @param {Object} params - 查询参数
 * @param {number} [params.skip=0] - 跳过记录数
 * @param {number} [params.limit=10] - 返回记录数上限
 * @param {string} [params.search] - 搜索关键词
 * @param {string|number} [params.data_source_id] - 数据源ID
 * @param {string} [params.category] - 分类
 * @param {string} [params.tags] - 标签（逗号分隔）
 * @returns {Promise} - 返回数据集列表
 */
export function getDatasetList(params) {
  return request({
    url: BASE_URL + '/',
    method: 'get',
    params,
  })
}

/**
 * 创建数据集
 * @param {Object} data - 数据集数据
 * @returns {Promise} - 返回创建结果
 */
export function createDataset(data) {
  return request({
    url: BASE_URL + '/',
    method: 'post',
    data,
  })
}

/**
 * 获取数据集详情
 * @param {string|number} datasetId - 数据集ID
 * @returns {Promise} - 返回数据集详情
 */
export function getDatasetDetail(datasetId) {
  return request({
    url: `${BASE_URL}/${datasetId}`,
    method: 'get',
  })
}

/**
 * 更新数据集
 * @param {string|number} datasetId - 数据集ID
 * @param {Object} data - 更新的数据集数据
 * @returns {Promise} - 返回更新结果
 */
export function updateDataset(datasetId, data) {
  return request({
    url: `${BASE_URL}/${datasetId}`,
    method: 'put',
    data,
  })
}

/**
 * 删除数据集
 * @param {string|number} datasetId - 数据集ID
 * @returns {Promise} - 返回删除结果
 */
export function deleteDataset(datasetId) {
  return request({
    url: `${BASE_URL}/${datasetId}`,
    method: 'delete',
  })
}

/**
 * 检查数据集结构变更
 * @param {string|number} datasetId - 数据集ID
 * @returns {Promise} - 返回结构变更检查结果
 */
export function checkDatasetStructure(datasetId) {
  return request({
    url: `${BASE_URL}/${datasetId}/check-structure`,
    method: 'post',
  })
}

/**
 * 应用数据集结构变更
 * @param {string|number} datasetId - 数据集ID
 * @returns {Promise} - 返回应用变更结果
 */
export function applyDatasetChanges(datasetId) {
  return request({
    url: `${BASE_URL}/${datasetId}/apply-changes`,
    method: 'post',
  })
}

/**
 * 同步数据集数据
 * @param {string|number} datasetId - 数据集ID
 * @returns {Promise} - 返回同步结果
 */
export function syncDataset(datasetId) {
  return request({
    url: `${BASE_URL}/${datasetId}/sync`,
    method: 'post',
  })
}

/**
 * 获取数据集字段列表
 * @param {string|number} datasetId - 数据集ID
 * @returns {Promise} - 返回字段列表
 */
export function getDatasetFields(datasetId) {
  return request({
    url: `${BASE_URL}/${datasetId}/fields`,
    method: 'get',
  })
}

/**
 * 获取字段详情
 * @param {string|number} datasetId - 数据集ID
 * @param {string|number} fieldId - 字段ID
 * @returns {Promise} - 返回字段详细信息
 */
export function getFieldDetail(datasetId, fieldId) {
  return request({
    url: `${BASE_URL}/${datasetId}/fields/${fieldId}`,
    method: 'get',
  })
}

/**
 * 更新字段元数据
 * @param {string|number} datasetId - 数据集ID
 * @param {string|number} fieldId - 字段ID
 * @param {Object} data - 字段数据
 * @returns {Promise} - 返回更新后的字段信息
 */
export function updateFieldMetadata(datasetId, fieldId, data) {
  return request({
    url: `${BASE_URL}/${datasetId}/fields/${fieldId}`,
    method: 'put',
    data,
  })
}

/**
 * 获取字段元数据建议
 * @param {string|number} datasetId - 数据集ID
 * @param {string|number} fieldId - 字段ID
 * @returns {Promise} - 返回字段元数据建议
 */
export function getFieldSuggestions(datasetId, fieldId) {
  return request({
    url: `${BASE_URL}/${datasetId}/fields/${fieldId}/suggestions`,
    method: 'get',
  })
}

/**
 * 获取数据集字段关系
 * @param {string|number} datasetId - 数据集ID
 * @returns {Promise} - 返回字段关系
 */
export function getDatasetRelationships(datasetId) {
  return request({
    url: `${BASE_URL}/${datasetId}/relationships`,
    method: 'get',
  })
}

/**
 * 获取数据集结构变更列表
 * @param {string|number} datasetId - 数据集ID
 * @param {Object} params - 查询参数
 * @param {string} [params.status] - 变更状态（pending, approved, rejected, applied）
 * @returns {Promise} - 返回结构变更列表
 */
export function getDatasetChanges(datasetId, params) {
  return request({
    url: `${BASE_URL}/${datasetId}/changes`,
    method: 'get',
    params,
  })
}

/**
 * 更新结构变更状态
 * @param {string|number} datasetId - 数据集ID
 * @param {string|number} changeId - 变更ID
 * @param {Object} data - 包含状态的数据
 * @returns {Promise} - 返回更新后的状态
 */
export function updateChangeStatus(datasetId, changeId, data) {
  return request({
    url: `${BASE_URL}/${datasetId}/changes/${changeId}/status`,
    method: 'put',
    data,
  })
}

/**
 * 同步数据集字段
 * @param {string|number} datasetId - 数据集ID
 * @returns {Promise} - 返回同步结果
 */
export function syncDatasetFields(datasetId) {
  return request({
    url: `${BASE_URL}/${datasetId}/sync-fields`,
    method: 'post',
  })
}
